// 文章类型

package model

import (
	"github.com/jinzhu/gorm"
	"goblog/utils/errmsg"
)

type Category struct {
	//gorm.Model 由于分类的结构简单数据量也小用不到软删除和更新时间删除时间这些
	ID   uint   `gorm:"primary_Key;auto_increment" json:"id"`  //主键自增变量
	Name string `gorm:"type:varchar(20);not null" json:"name"` //数据表内只有id和name
}

// 查询分类

func CheckCategory(name string) (code int) {
	var cate Category
	db.Select("id").Where("name =?", name).First(&cate) //name是入参
	if cate.ID != 0 {
		return errmsg.ERROR_CATENAME_USED //2001
	}
	return errmsg.SUCCESS
}

// 添加分类

func CreateCate(data *Category) int { //返回的int就是状态码
	err := db.Create(&data).Error
	if err != nil {
		return errmsg.ERROR //400
	}
	return errmsg.SUCCESS
}

// 查询分类列表
// 涉及到列表的就要把分页做好

func GetCate(pageSize int, pageNum int) ([]Category, int) {
	var cate []Category //定义一个users等于上面的切片
	var total int
	err = db.Limit(pageSize).Offset((pageNum - 1) * pageSize).Find(&cate).Count(&total).Error //Limit做分页 Offset偏移量
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, 0
	}
	return cate, total
}

//编辑分类
//map更新会更新其中有变化的属性而struct是更新有变化且非零的值（但是次项目中我们role设置有0）

func EditCate(id int, data *Category) int {
	var cate Category                       //var一个user是User的模型保持简洁
	var maps = make(map[string]interface{}) //interface是接口类型
	maps["name"] = data.Name                //给maps赋值

	err = db.Model(&cate).Where("id = ?", id).Update(maps).Error //从db.Model中的User更新
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCCESS
}

//需要稍后处理的问题或者计划添加的功能会写todo

//删除分类

func DeleteCate(id int) int {
	var cate Category
	err = db.Where("id = ?", id).Delete(&cate).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCCESS
}
